<!doctype html><html lang dir=ltr><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>【第8周笔记】程序设计方法学 | Python | Hui.Ke - Blog</title><meta name=generator content="Hugo Eureka 0.9.3"><link rel=stylesheet href=https://b.hui.ke/css/eureka.min.9cec6350e37e534b0338fa9a085bf06855de3b0f2dcf857e792e5e97b07ea905d4d5513db554cbc26a9c3da622bae92d.css><script defer src=https://b.hui.ke/js/eureka.min.fa9a6bf6d7a50bb635b4cca7d2ba5cf3dfb095ae3798773f1328f7950028b48c17d06276594e1b5f244a25a6c969a705.js></script>
<link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload href="https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=Noto+Serif+SC:wght@400;600;700&display=swap" as=style onload='this.onload=null,this.rel="stylesheet"'><link rel=stylesheet href=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/styles/vs.min.css media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/highlight.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/bash.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/ini.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/json.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/php.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/python.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/shell.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/sql.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/x86asm.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/xml.min.js crossorigin></script>
<link rel=stylesheet href=https://b.hui.ke/css/highlightjs.min.2958991528e43eb6fc9b8c4f2b8e052f79c4010718e1d1e888a777620e9ee63021c2c57ec7417a3108019bb8c41943e6.css media=print onload='this.media="all",this.onload=null'><script defer type=text/javascript src=https://lib.baomitu.com/font-awesome/6.1.1/js/all.min.js></script>
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css integrity=sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.js integrity=sha384-VQ8d8WVFw0yHhCk5E8I86oOhv48xLpnDZx5T9GogA/Y84DcCKWXDmSDfn13bzFZY crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){renderMathInElement(document.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}]})})</script><script defer src=https://cdn.jsdelivr.net/npm/mermaid@8.14.0/dist/mermaid.min.js integrity=sha384-atOyb0FxAgN9LyAc6PEf9BjgwLISyansgdH8/VXQH8p2o5vfrRgmGIJ2Sg22L0A0 crossorigin></script>
<link rel=icon type=image/png sizes=32x32 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_32x32_fill_box_center_3.png><link rel=apple-touch-icon sizes=180x180 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_180x180_fill_box_center_3.png><meta name=description content="  课程笔记"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Docs","item":"https://b.hui.ke/docs/"},{"@type":"ListItem","position":2,"name":"Python","item":"https://b.hui.ke/docs/python/"},{"@type":"ListItem","position":3,"name":"【第8周笔记】程序设计方法学","item":"https://b.hui.ke/docs/python/8/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://b.hui.ke/docs/python/8/"},"headline":"【第8周笔记】程序设计方法学 | Python | Hui.Ke - Blog","datePublished":"2022-05-03T16:09:25+08:00","dateModified":"2022-05-03T16:09:25+08:00","wordCount":2647,"author":{"@type":"Person","name":"Hui.Ke"},"publisher":{"@type":"Person","name":"Hui.Ke","logo":{"@type":"ImageObject","url":"https://b.hui.ke/icon.png"}},"description":"\u003cp\u003e  课程笔记\u003c\/p\u003e"}</script><meta property="og:title" content="【第8周笔记】程序设计方法学 | Python | Hui.Ke - Blog"><meta property="og:type" content="article"><meta property="og:image" content="https://b.hui.ke/icon.png"><meta property="og:url" content="https://b.hui.ke/docs/python/8/"><meta property="og:description" content="  课程笔记"><meta property="og:site_name" content="Hui.Ke - Blog"><meta property="article:published_time" content="2022-05-03T16:09:25+08:00"><meta property="article:modified_time" content="2022-05-03T16:09:25+08:00"><meta property="article:section" content="docs"><meta property="article:tag" content="自顶向下"><meta property="article:tag" content="计算思维"><meta property="article:tag" content="用户体验"><meta property="og:see_also" content="https://b.hui.ke/docs/python/20/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/10/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/19/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/9/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/18/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/17/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/7/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/16/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/6/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/15/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/5/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/14/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/4/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/13/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/3/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/12/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/2/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/11/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/1/"><script>!function(e){"use strict";!function(){var i,s=window,o=document,a=e,c="".concat("https:"===o.location.protocol?"https://":"http://","sdk.51.la/js-sdk-pro.min.js"),n=o.createElement("script"),r=o.getElementsByTagName("script")[0];n.type="text/javascript",n.setAttribute("charset","UTF-8"),n.async=!0,n.src=c,n.id="LA_COLLECT",a.d=n,i=function(){s.LA.ids.push(a)},s.LA?s.LA.ids&&i():(s.LA=e,s.LA.ids=[],i()),r.parentNode.insertBefore(n,r)}()}({id:"Jgb8aUbG5e3rqhrs",ck:"Jgb8aUbG5e3rqhrs",autoTrack:!0,hashMode:!0})</script><body class="flex min-h-screen flex-col"><header class="min-h-16 pl-scrollbar bg-secondary-bg fixed z-50 flex w-full items-center shadow-sm"><div class="mx-auto w-full max-w-screen-xl"><script>let storageColorScheme=localStorage.getItem("lightDarkMode");((storageColorScheme=="Auto"||storageColorScheme==null)&&window.matchMedia("(prefers-color-scheme: dark)").matches||storageColorScheme=="Dark")&&document.getElementsByTagName("html")[0].classList.add("dark")</script><nav class="flex items-center justify-between flex-wrap px-4 py-4 md:py-0"><a href=/ class="me-6 text-primary-text text-xl font-bold">Hui.Ke - Blog</a>
<button id=navbar-btn class="md:hidden flex items-center px-3 py-2" aria-label="Open Navbar">
<i class="fas fa-bars"></i></button><div id=target class="hidden block md:flex md:grow md:justify-between md:items-center w-full md:w-auto text-primary-text z-20"><div class="md:flex md:h-16 text-sm md:grow pb-4 md:pb-0 border-b md:border-b-0"><a href=/posts/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Posts</a>
<a href=/docs/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 selected-menu-item me-4">Docs</a>
<a href=/categories/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Categories</a>
<a href=/series/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Series</a>
<a href=/tags/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Tags</a>
<a href=/love/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Love</a>
<a href=/about/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">About</a></div><div class=flex><div class="relative pt-4 md:pt-0"><div class="cursor-pointer hover:text-eureka" id=lightDarkMode><i class="fas fa-adjust"></i></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-30" id=is-open></div><div class="absolute flex flex-col start-0 md:start-auto end-auto md:end-0 hidden bg-secondary-bg w-48 rounded py-2 border border-tertiary-bg cursor-pointer z-40" id=lightDarkOptions><span class="px-4 py-1 hover:text-eureka" name=Light>Light</span>
<span class="px-4 py-1 hover:text-eureka" name=Dark>Dark</span>
<span class="px-4 py-1 hover:text-eureka" name=Auto>Auto</span></div></div></div></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-0" id=is-open-mobile></div></nav><script>let element=document.getElementById("lightDarkMode");storageColorScheme==null||storageColorScheme=="Auto"?document.addEventListener("DOMContentLoaded",()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",switchDarkMode)}):storageColorScheme=="Light"?(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","sun"),element.firstElementChild.classList.add("fa-sun")):storageColorScheme=="Dark"&&(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","moon"),element.firstElementChild.classList.add("fa-moon")),document.addEventListener("DOMContentLoaded",()=>{getcolorscheme(),switchBurger()})</script></div></header><main class="grow pt-16"><div class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl lg:px-4 xl:px-8"><div class=lg:pt-12><div class="flex flex-col md:flex-row bg-secondary-bg rounded"><div class="md:w-1/4 lg:w-1/5 border-e"><div class="sticky top-16 pt-6"><div id=sidebar-title class="md:hidden mx-4 px-2 pt-4 pb-2 md:border-b text-tertiary-text md:text-primary-text"><span class=font-semibold>Table of Contents</span>
<i class='fas fa-caret-right ms-1'></i></div><div id=sidebar-toc class="hidden md:block overflow-y-auto mx-6 md:mx-0 pe-6 pt-2 md:max-h-doc-sidebar bg-primary-bg md:bg-transparent"><div class="flex flex-wrap ms-4 -me-2 p-2 bg-secondary-bg md:bg-primary-bg rounded"><a class=hover:text-eureka href=https://b.hui.ke/docs/python/>Python</a></div><ul class=ps-6><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/20/>期末测验</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/10/>【第9+周笔记】全课程总结与学习展望</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/19/>【第9周程序】计算生态纵览</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/9/>【第9周笔记】计算生态纵览</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/18/>【第8周程序】程序设计方法学</a></div></li><li class=py-2><div><a class="text-eureka hover:text-eureka" href=https://b.hui.ke/docs/python/8/>【第8周笔记】程序设计方法学</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/17/>【第7周程序】文件和数据格式化</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/7/>【第7周笔记】文件和数据格式化</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/16/>【第6周程序】组合数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/6/>【第6周笔记】组合数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/15/>【第5周程序】函数和代码复用</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/5/>【第5周笔记】函数和代码复用</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/14/>【第4周程序】程序的控制结构</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/4/>【第4周笔记】程序的控制结构</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/13/>【第3周程序】基本数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/3/>【第3周笔记】基本数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/12/>【第2周程序】Python 基本图形绘制</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/2/>【第2周笔记】Python 基本图形绘制</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/11/>【第1周程序】Python 基本语法元素</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/1/>【第1周笔记】Python 基本语法元素</a></div></li></ul></div></div></div><div class="w-full md:w-3/4 lg:w-4/5 pb-8 pt-2 md:pt-8"><div class=flex><div class="w-full lg:w-3/4 px-6"><article class=prose><h1 class=mb-4>【第8周笔记】程序设计方法学</h1><div class="text-tertiary-text not-prose mt-2 flex flex-row flex-wrap items-center"><div class="me-6 my-2"><i class="fas fa-calendar me-1"></i>
<span>2022-05-03</span></div><div class="me-6 my-2"><i class="fa-solid fa-pen-to-square me-1"></i>
<span>2022-05-03</span></div><div class="me-6 my-2"><i class="fas fa-clock me-1"></i>
<span>6 min read</span></div><div class="me-6 my-2"><i class="fas fa-folder me-1"></i>
<a href=https://b.hui.ke/categories/it/ class=hover:text-eureka>IT</a></div><div class="me-6 my-2"><i class="fas fa-th-list me-1"></i>
<a href=https://b.hui.ke/series/python/ class=hover:text-eureka>Python</a></div><div class="me-6 my-2"><i class="fa-solid fa-eye me-1"></i>
<span id=busuanzi_value_page_pv><i class="fa fa-spinner fa-spin"></i></span> Hits</div></div><p>  课程笔记</p><h2 id=问题分析>问题分析</h2><p>  体育竞技分析：模拟N场比赛</p><p>  计算思维：抽象 + 自动化</p><p>  模拟：抽象比赛过程 + 自动化执行N场比赛</p><p>  当 N 越大时，比赛结果分析会越科学</p><h2 id=自顶向下设计>自顶向下（设计）</h2><p>  将一个总问题表达为若干个小问题组成的形式</p><p>  使用同样方法进一步分解小问题</p><p>  直至，小问题可以用计算机简单明了的解决</p><h2 id=自底向上执行>自底向上（执行）</h2><p>  逐步组建复杂系统的有效测试方法</p><p>  分单元测试，逐步组装</p><p>  按照自顶向下相反的路径操作</p><p>  直至，系统各部分以组装的思路都经过测试和验证</p><h2 id=举一反三>举一反三</h2><p>  理解自顶向下和自底向上</p><p>  理解自顶向下的设计思维：分而治之</p><p>  理解自底向上的执行思维：模块化集成</p><p>  自顶向下是“系统”思维的简化</p><h2 id=计算思维>计算思维</h2><p>  第3种人类思维特征</p><p>  逻辑思维：推理和演绎，数学为代表，A->B B->C A->C</p><p>  实证思维：实验和验证，物理为代表，引力波&lt;-实验</p><p>  计算思维：设计和构造，计算机为代表，汉诺塔递归</p><p>  抽象和自动化</p><p>  计算思维：Computational Thinking</p><p>  <strong>抽象</strong>问题的计算过程，利用计算机<strong>自动化</strong>求解</p><p>  计算思维是基于计算机的思维方式</p><p>  抽象问题的计算过程，利用计算机自动化求解</p><p>  计算思维基于计算机强大的算力及海量数据</p><p>  抽象计算过程，关注设计和构造，而非因果</p><p>  以计算机程序设计为实现的主要手段</p><h2 id=用户体验>用户体验</h2><p>  实现功能 -> 关注体验</p><p>  用户体验指用户对产品建立的主观感受和认识</p><p>  关心功能实现，更要关心用户体验，才能做出好产品</p><p>  编程只是手段，不是目的，程序最终为人类服务</p><h2 id=提高用户体验的方法>提高用户体验的方法</h2><ol><li>进度展示<ul><li>如果程序需要计算时间，可能产生等待，请增加进度展示</li><li>如果程序有若干步骤，需要提示用户，请增加进度展示</li><li>如果程序可能存在大量次数的循环，请增加进度展示</li></ul></li><li>异常处理<ul><li>当获得用户输入，对合规性需要检查，需要异常处理</li><li>当读写文件时，对结果进行判断，需要异常处理</li><li>当进行输入输出时，对运算结果进行判断，需要异常处理</li></ul></li><li>其他类方法<ul><li>打印输出：特定位置，输出程序运行的过程信息</li><li>日志文件：对程序异常及用户使用进行定期记录</li><li>帮助信息：给用户多种方式提供帮助信息</li></ul></li></ol><p>  软件程序 -> 软件产品</p><blockquote><p><strong>用户体验</strong>是程序到产品的关键环节</p></blockquote><h2 id=基本的程序设计模式>基本的程序设计模式</h2><ol><li>从 IPO 开始<ol><li>I：Input 输入，程序的输入</li><li>P：Process 处理，程序的主要逻辑</li><li>O：Output 输出，程序的输出</li><li>确定IPO：明确计算部分及功能边界</li><li>编写程序：将计算求解的设计变成现实</li><li>调试程序：确保程序按照正确逻辑能够正确运行</li></ol></li><li>自顶向下设计</li><li>模块化设计<ul><li>通过函数或对象封装将程序划分为模块及模块间的表达</li><li>具体包括：主程序、子程序和子程序间关系</li><li>分而治之：一种分而治之、分层抽象、体系化的设计思想</li><li>紧耦合：两个部分之间交流很多，无法独立存在</li><li>松耦合：两个部分之间交流较少，可以独立存在</li><li>模块内部紧耦合、模块之间松耦合</li></ul></li><li>配置化设计<ul><li><strong>引擎 + 配置</strong>：程序执行和配置分离，将可选参数配置化</li><li>将程序开发变成配置文件编写，扩展功能而不修改程序</li><li>关键在于接口设计，清晰明了、灵活可扩展</li></ul></li></ol><h2 id=应用开发的四个步骤>应用开发的四个步骤</h2><p>  从应用需求到软件产品</p><ol><li>产品定义：对应用需求充分理解和明确定义<ul><li>产品定义，而不仅是功能定义，要考虑商业模式</li></ul></li><li>系统架构：以系统方式思考产品的技术实现<ul><li>系统架构，关注数据流、模块化、体系架构</li></ul></li><li>设计与实现：结合架构完成关键设计及系统实现<ul><li>结合可扩展性、灵活性等进行设计优化</li></ul></li><li>用户体验：从用户角度思考应用效果<ul><li>用户至上，体验优先，以用户为中心</li></ul></li></ol><h2 id=python-社区>Python 社区</h2><p>13万个第三方库：<a href=https://pypi.org/>Python 社区</a></p><p>PyPI: Python Package Index</p><p>PSF 维护的展示全球 Python 计算生态的主站</p><p>学会检索并利用 PyPI，找到合适的第三方库开发程序</p><p>实例：开发与区块链相关的程序</p><ol><li>在 pypi.org 搜索 blockchain</li><li>挑选适合开发目标的第三方库作为基础</li><li>完成自己需要的功能</li></ol><h2 id=安装-python-第三方库>安装 Python 第三方库</h2><p>  三种方法</p><ol><li>使用 pip 命令（主要方法）</li><li>集成安装方法</li><li>文件安装方法</li></ol><p>  常用的 pip 命令</p><pre><code class=language-python>pip install &lt;第三方库名&gt;     # 安装指定的第三方库
pip install –U &lt;第三方库名&gt;     # 使用 -U 标签更新已安装的指定第三方库
pip uninstall &lt;第三方库名&gt;     # 卸载指定的第三方库
pip download &lt;第三方库名&gt;     # 下载但不安装指定的第三方库
pip show &lt;第三方库名&gt;     # 列出某个指定第三方库的详细信息
pip search &lt;关键词&gt;     # 根据关键词在名称和介绍中搜索第三方库
pip search blockchain     # 搜索 blockchain 相关库
pip list     # 列出当前系统已经安装的第三方库
</code></pre><p>  集成安装方法</p><p>  集成安装：结合特定 Python 开发工具的批量安装</p><p><a href=https://www.continuum.io>Anaconda</a></p><ul><li>支持近800个第三方库</li><li>包含多个主流工具</li><li>适合数据计算领域开发</li></ul><p>  文件安装方法</p><p>  为什么有些第三方库用pip可以下载，但无法安装？</p><ul><li>某些第三方库 pip 下载后，需要编译再安装</li><li>如果操作系统没有编译环境，则能下载但不能安装</li><li>可以直接下载编译后的版本用于安装吗？</li></ul><p>  实例：安装 wordcloud 库</p><ol><li>在 UCI 页面上搜索 wordcloud</li><li>下载对应版本的文件</li><li>使用 pip install &lt;文件名> 安装</li></ol><h2 id=os-库基本介绍>os 库基本介绍</h2><p>  os 库是 Python 标准库，包含几百个函数</p><p>  常用路径操作、进程管理、环境参数等几类</p><p>  路径操作：os.path 子库，处理文件路径及信息</p><p>  进程管理：启动系统中其他程序</p><p>  环境参数：获得系统软硬件信息等环境参数</p><h2 id=路径操作>路径操作</h2><p>os.path 子库以 path 为入口，用于操作和处理文件路径</p><pre><code class=language-python>import os.path
# 或
import os.path as op
</code></pre><table><thead><tr><th style=text-align:left>函数</th><th style=text-align:left>描述</th></tr></thead><tbody><tr><td style=text-align:left>os.path.abspath(path)</td><td style=text-align:left>返回 path 在当前系统中的绝对路径</td></tr><tr><td style=text-align:left>os.path.normpath(path)</td><td style=text-align:left>归一化 path 的表示形式，统一用 \ 分隔路径</td></tr><tr><td style=text-align:left>os.path.relpath(path)</td><td style=text-align:left>返回当前程序与文件之间的相对路径（relative path）</td></tr><tr><td style=text-align:left>os.path.dirname(path)</td><td style=text-align:left>返回 path 中的目录名称</td></tr><tr><td style=text-align:left>os.path.basename(path)</td><td style=text-align:left>返回 path 中最后的文件名称</td></tr><tr><td style=text-align:left>os.path.join(path, *paths)</td><td style=text-align:left>组合 path 与 paths，返回一个路径字符串</td></tr><tr><td style=text-align:left>os.path.exists(path)</td><td style=text-align:left>判断 path 对应文件或目录是否存在，返回 True 或 False</td></tr><tr><td style=text-align:left>os.path.isfile(path)</td><td style=text-align:left>判断 path 所对应是否为已存在的文件，返回 True 或 False</td></tr><tr><td style=text-align:left>os.path.isdir(path)</td><td style=text-align:left>判断 path 所对应是否为已存在的目录，返回 True 或 False</td></tr><tr><td style=text-align:left>os.path.getatime(path)</td><td style=text-align:left>返回 path 对应文件或目录上一次的访问时间</td></tr><tr><td style=text-align:left>os.path.getmtime(path)</td><td style=text-align:left>返回 path 对应文件或目录最近一次的修改时间</td></tr><tr><td style=text-align:left>os.path.getctime(path)</td><td style=text-align:left>返回 path 对应文件或目录的创建时间</td></tr><tr><td style=text-align:left>os.path.getsize(path)</td><td style=text-align:left>返回 path 对应文件的大小，以字节为单位</td></tr></tbody></table><table><thead><tr><th style=text-align:left>举例</th><th style=text-align:left>输出</th></tr></thead><tbody><tr><td style=text-align:left>os.path.abspath(&ldquo;file.txt&rdquo;)</td><td style=text-align:left>&lsquo;C:\Users\Tian Song\Python36-32\file.txt&rsquo;</td></tr><tr><td style=text-align:left>os.path.normpath(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>&lsquo;D:\PYE\file.txt&rsquo;</td></tr><tr><td style=text-align:left>os.path.relpath(&ldquo;C://PYE//file.txt&rdquo;)</td><td style=text-align:left>&lsquo;..\..\..\..\..\..\..\PYE\file.txt&rsquo;</td></tr><tr><td style=text-align:left>os.path.dirname(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>&lsquo;D://PYE&rsquo;</td></tr><tr><td style=text-align:left>os.path.basename(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>&lsquo;file.txt&rsquo;</td></tr><tr><td style=text-align:left>os.path.join(&ldquo;D:/&rdquo;, &ldquo;PYE/file.txt&rdquo;)</td><td style=text-align:left>&lsquo;D:/PYE/file.txt&rsquo;</td></tr><tr><td style=text-align:left>os.path.exists(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>False</td></tr><tr><td style=text-align:left>os.path.isfile(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>True</td></tr><tr><td style=text-align:left>os.path.isdir(&ldquo;D://PYE//file.txt&rdquo;)</td><td style=text-align:left>Fals</td></tr><tr><td style=text-align:left>os.path.getatime(&ldquo;D:/PYE/file.txt&rdquo;)</td><td style=text-align:left>1518356633.7551725</td></tr><tr><td style=text-align:left>os.path.getmtime(&ldquo;D:/PYE/file.txt&rdquo;)</td><td style=text-align:left>1518356633.7551725</td></tr><tr><td style=text-align:left>time.ctime(os.path.getctime(&ldquo;D:/PYE/file.txt&rdquo;))</td><td style=text-align:left>&lsquo;Sun Feb 11 21:43:53 2018&rsquo;</td></tr><tr><td style=text-align:left>os.path.getsize(&ldquo;D:/PYE/file.txt&rdquo;)</td><td style=text-align:left>180768</td></tr></tbody></table><h2 id=进程管理>进程管理</h2><p>os.system(command)</p><ol><li>执行程序或命令 command</li><li>在 Windows 系统中，返回值为 cmd 的调用返回信息</li></ol><pre><code class=language-python>import os
os.system(&quot;C:\\Windows\\System32\\calc.exe&quot;)     # 调出系统计算器
os.system(&quot;C:\\Windows\\System32\\mspaint.exe \D:\\PYECourse\\grwordcloud.png&quot;)     # 调出画图应用并在画图应用内打开 grwordcloud.png 图片
</code></pre><h2 id=环境参数>环境参数</h2><table><thead><tr><th style=text-align:left>函数</th><th style=text-align:left>描述</th><th style=text-align:left>举例</th><th style=text-align:left>输出</th></tr></thead><tbody><tr><td style=text-align:left>os.chdir(path)</td><td style=text-align:left>修改当前程序操作的路径</td><td style=text-align:left>os.chdir(&ldquo;D:&rdquo;)</td><td></td></tr><tr><td style=text-align:left>os.getcwd()</td><td style=text-align:left>返回程序的当前路径</td><td style=text-align:left>os.getcwd()</td><td style=text-align:left>&lsquo;D:\&rsquo;</td></tr><tr><td style=text-align:left>os.getlogin()</td><td style=text-align:left>获得当前系统登录用户名称</td><td style=text-align:left>os.getlogin()</td><td style=text-align:left>&lsquo;Tian Song&rsquo;</td></tr><tr><td style=text-align:left>os.cpu_count()</td><td style=text-align:left>获得当前系统的 CPU 数量</td><td style=text-align:left>os.cpu_count()</td><td style=text-align:left>8</td></tr><tr><td style=text-align:left>os.urandom(n)</td><td style=text-align:left>获得 n 个字节长度的随机字符串，通常用于加解密运算</td><td style=text-align:left>os.urandom(10)</td><td style=text-align:left>b'7\xbe\xf2!\xc1=\x01gL\xb3'</td></tr></tbody></table><h2 id=第三方库自动安装脚本>第三方库自动安装脚本</h2><table><thead><tr><th style=text-align:center>库名</th><th style=text-align:left>用途</th><th style=text-align:left>pip 安装指令</th></tr></thead><tbody><tr><td style=text-align:center>Jieba</td><td style=text-align:left>中文分词</td><td style=text-align:left>pip install jieba</td></tr><tr><td style=text-align:center>Beautiful</td><td style=text-align:left>Soup HTML 和 XML 解析器</td><td style=text-align:left>pip install beautifulsoup4</td></tr><tr><td style=text-align:center>Wheel</td><td style=text-align:left>Python 第三方库文件打包工具</td><td style=text-align:left>pip install wheel</td></tr><tr><td style=text-align:center>PyInstaller</td><td style=text-align:left>打包 Python 源文件为可执行文件</td><td style=text-align:left>pip install pyinstaller</td></tr><tr><td style=text-align:center>Django</td><td style=text-align:left>Python 最流行的 Web 开发框架</td><td style=text-align:left>pip install django</td></tr><tr><td style=text-align:center>Flask</td><td style=text-align:left>轻量级 Web 开发框架</td><td style=text-align:left>pip install flask</td></tr><tr><td style=text-align:center>WeRoBot</td><td style=text-align:left>微信机器人开发框架</td><td style=text-align:left>pip install werobot</td></tr><tr><td style=text-align:center>SymPy</td><td style=text-align:left>数学符号计算工具</td><td style=text-align:left>pip install sympy</td></tr><tr><td style=text-align:center>Pandas</td><td style=text-align:left>高效数据分析和计算</td><td style=text-align:left>pip install pandas</td></tr><tr><td style=text-align:center>Networkx</td><td style=text-align:left>复杂网络和图结构的建模和分析</td><td style=text-align:left>pip install networkx</td></tr><tr><td style=text-align:center>PyQt5</td><td style=text-align:left>基于 Qt 的专业级 GUI 开发框架</td><td style=text-align:left>pip install pyqt5</td></tr><tr><td style=text-align:center>PyOpenGL</td><td style=text-align:left>多平台 OpenGL 开发接口</td><td style=text-align:left>pip install pyopengl</td></tr><tr><td style=text-align:center>PyPDF2</td><td style=text-align:left>PDF 文件内容提取及处理</td><td style=text-align:left>pip install pypdf2</td></tr><tr><td style=text-align:center>docopt</td><td style=text-align:left>Python 命令行解析</td><td style=text-align:left>pip install docopt</td></tr><tr><td style=text-align:center>PyGame</td><td style=text-align:left>简单小游戏开发框架</td><td style=text-align:left>pip install pygame</td></tr></tbody></table><pre><code class=language-python>#BatchInstall.py
import os
libs = {&quot;numpy&quot;,&quot;matplotlib&quot;,&quot;pillow&quot;,&quot;sklearn&quot;,&quot;requests&quot;,\
        &quot;jieba&quot;,&quot;beautifulsoup4&quot;,&quot;wheel&quot;,&quot;networkx&quot;,&quot;sympy&quot;,\
        &quot;pyinstaller&quot;,&quot;django&quot;,&quot;flask&quot;,&quot;werobot&quot;,&quot;pyqt5&quot;,\
        &quot;pandas&quot;,&quot;pyopengl&quot;,&quot;pypdf2&quot;,&quot;docopt&quot;,&quot;pygame&quot;}
try:
    for lib in libs:
        os.system(&quot;pip install &quot; + lib)
    print(&quot;Successful&quot;) 
except:
    print(&quot;Failed Somehow&quot;)
</code></pre></article><div class=my-4><a href=https://b.hui.ke/tags/%E8%87%AA%E9%A1%B6%E5%90%91%E4%B8%8B/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#自顶向下</a>
<a href=https://b.hui.ke/tags/%E8%AE%A1%E7%AE%97%E6%80%9D%E7%BB%B4/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#计算思维</a>
<a href=https://b.hui.ke/tags/%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#用户体验</a></div><div class=py-2><div class="my-8 flex flex-col items-center md:flex-row"><a href=https://b.hui.ke/authors/hui.ke/ class="md:me-4 text-primary-text h-24 w-24"><img src=https://b.hui.ke/bagua.webp class="bg-primary-bg w-full rounded-full" alt=Avatar></a><div class="mt-4 w-full md:mt-0 md:w-auto"><a href=https://b.hui.ke/authors/hui.ke/ class="mb-2 block border-b pb-1 text-lg font-bold"><h3>Hui.Ke</h3></a><span class="block pb-2">❤ Cyber Security | Safety is a priority.</span>
<a href=mailto:3199731997@qq.com class=me-2><i class="fas fa-envelope"></i></a>
<a href="https://wpa.qq.com/msgrd?v=3&uin=3199731997" class=me-2><i class="fab fa-qq"></i></a>
<a href=/images/aixinxianquan.webp class=me-2><i class="fab fa-weixin"></i></a></div></div></div><div class="-mx-2 mt-4 flex flex-col border-t px-2 pt-4 md:flex-row md:justify-between"><div><span class="text-primary-text block font-bold">Previous</span>
<a href=https://b.hui.ke/docs/python/18/ class=block>【第8周程序】程序设计方法学</a></div><div class="mt-4 md:mt-0 md:text-right"><span class="text-primary-text block font-bold">Next</span>
<a href=https://b.hui.ke/docs/python/17/ class=block>【第7周程序】文件和数据格式化</a></div></div><div id=valine-comments class=mt-4></div><script defer src=https://cdn.jsdelivr.net/npm/valine@1.4.16/dist/Valine.min.js integrity=sha384-e0+DNUCJo75aOAzHQbFWYBCM9/S4f0BhRJXvEgbE3mMS85RM20MSSGStHuNdY2QK crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){new Valine({el:"#valine-comments",appId:"BQnVqWIiq78AdqwyhvBVAa3y-MdYXbMMI",appKey:"RKg5By312YjM8rU6WkkfK9IN",recordIP:"true",serverURLs:"https://l.hui.ke",visitor:"true"})})</script></div><div class="hidden lg:block lg:w-1/4"><div class="bg-secondary-bg
prose sticky top-16 z-10 hidden px-6 py-4 lg:block"><h3>On This Page</h3></div><div class="sticky-toc
border-s
hidden px-6 pb-6 lg:block"><nav id=TableOfContents><ul><li><a href=#问题分析>问题分析</a></li><li><a href=#自顶向下设计>自顶向下（设计）</a></li><li><a href=#自底向上执行>自底向上（执行）</a></li><li><a href=#举一反三>举一反三</a></li><li><a href=#计算思维>计算思维</a></li><li><a href=#用户体验>用户体验</a></li><li><a href=#提高用户体验的方法>提高用户体验的方法</a></li><li><a href=#基本的程序设计模式>基本的程序设计模式</a></li><li><a href=#应用开发的四个步骤>应用开发的四个步骤</a></li><li><a href=#python-社区>Python 社区</a></li><li><a href=#安装-python-第三方库>安装 Python 第三方库</a></li><li><a href=#os-库基本介绍>os 库基本介绍</a></li><li><a href=#路径操作>路径操作</a></li><li><a href=#进程管理>进程管理</a></li><li><a href=#环境参数>环境参数</a></li><li><a href=#第三方库自动安装脚本>第三方库自动安装脚本</a></li></ul></nav></div><script>window.addEventListener("DOMContentLoaded",()=>{enableStickyToc()})</script></div></div></div></div></div><script>document.addEventListener("DOMContentLoaded",()=>{hljs.highlightAll(),changeSidebarHeight(),switchDocToc()})</script></div></div></main><footer class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl"><div class="text-center p-6 pin-b"><script async src=/js/click.js></script><div id=poem_ip></div><script type=text/javascript>jinrishici.load(function(e){tags.innerHTML=e.data.matchTags})</script><div><span id=timeDate>载入年天数...</span><span id=times>载入时分秒...</span>
<script async src=/js/duration.js></script></div><a href=https://www.foreverblog.cn/go.html target=_blank><img src=https://img.foreverblog.cn/wormhole_4_tp.gif alt style=display:inline-block;width:auto;height:32px title=穿梭虫洞-随机访问十年之约友链博客></a><p class="text-sm text-tertiary-text"><script async src=//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js></script>本站总访问量 <span id=busuanzi_value_site_pv></span> 次
&#183; 您是本站的第 <span id=busuanzi_value_site_uv></span> 个小伙伴</p><script async src=/js/tab.js></script></div></div></footer></body></html>